/**  数组去重方法 */

/**  通过 Set 时间复杂度O(n),空间复杂度O(n) */
export const arrayDeduplication = (arr) => ([...new Set(arr)]);
export const arrayDeduplication_1 = (arr) => (Array.from(new Set(arr)));

/**  filter 和 indexOf */
export const arrayDeduplication_2 = (arr) => arr.filter((item, index) => arr.indexOf(item) === index);

/**  使用reduce方法和includes方法 */
export const arrayDeduplication_3 = (arr) => arr.reduce((prev, curr) => prev.includes(curr) ? prev : [...prev, curr], [])

/**  Map数据结构 */
export const arrayDeduplication_4 = (arr) => {
    const map = new Map();
    const result = [];
    for (let item of arr) {
        if (!map.has(item)) {
            map.set(item, true);
            result.push(item);
        }
    }

    return result;
}

/**  reduce方法和对象属性 */
export const arrayDeduplication_5 = (arr) => {
    const uniqueArr = arr.reduce((prev, curr) => {
        if (!prev[curr]) {
            prev[curr] = true;
        }
        return prev;
    }, {});

    return Object.keys(uniqueArr).map(Number);
}